<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 返回结果为promise对象
      // 1.retrun结果不是promise对象 则最后结果为状态为reslove的promise
      // 2.抛出错误 throw new Error('错误') ，则最后结果为 reject的promise
      // 3.retrun promise对象 ，根据返回的promise状态来决定最后结果状态
      // 4.let n = await promise   n为promise成功的传的参数success(n)
      // 5.只能通过try catch 来捕获错误

      /*tips*/
      function getUserId() {
        return new Promise((success, reject) => {
          success(28654780);
        });
      }
      function getUserName(id) {
        myAjax("GET", `https://api.apiopen.top/getSingleJoke?sid=${id}`);
      }
      async function getInfo() {
        console.log("async 开始了");
        let id = await getUserId();
        console.log(id);
        let response = await getUserName(id);
        console.log(response);
      }
      getInfo();
      console.log("你后面是个微任务");

      // 输出结果："async 开始了"
      //          "你后面是个微任务"
      //          28654780
      //          {....}

      // 面试题

      setTimeout(() => {
        console.log(11);
      }, 0);

      async function t1() {
        console.log(22);
        await t2();
        console.log(33);
      }
      async function t2() {
        console.log(44);
      }
      console.log(55);
      t1();
      console.log(66);

      // 输出结果：55 22 44 66 33 11

      /* 注意调用了aysnc函数后 会执行到第一个await，其余await会在调用栈清空后执行调用next去执行 相当于一个微任务 */
      /* aysnc函数相当于generater的语法糖*/
      //
    </script>
  </body>
</html>
